prompt 费用登记中间表生成 SP_SF_FYDJ00_FYMX00
create or replace procedure SP_SF_FYDJ00_FYMX00
(
ad_CZY000 in number ,--输入:操作员
ad_BRID00 in number ,--输入:病人ID
ad_GHID00 in number ,--输入:挂号ID
as_GHH000 in varchar2 ,--输入:挂号号
ad_ID0000 in number ,--输入:id0000=SF_FYXX00_TEMPMX.ID0000
ad_DJH000 in number ,--输入:费用表的单据号
as_DJLSH0 in varchar2 ,--输入:单据流水号(处方流水号或医技单据号)
as_XMFL00 in varchar2 ,--输入:项目分类 0处方 1医技 2:费用 3:收费代入费用
ad_XMBH00 in number ,--输入:[SP_SF_FYMX00_REG000]医疗收费编码或药品编码
as_XMMC00 in varchar2 ,--输入:[SP_SF_FYMX00_REG000]项目名称
as_XMGG00 in varchar2 ,--输入:[SP_SF_FYMX00_REG000]药品规格
as_XMDW00 in varchar2 ,--输入:[SP_SF_FYMX00_REG000]单位
ad_XMDJ00 in number ,--输入:[SP_SF_FYMX00_REG000]单价
ad_XMSL00 in number ,--输入:[SP_SF_FYMX00_REG000]数量
ad_HJJE00 in number ,--输入:[SP_SF_FYMX00_REG000]总金额
ad_ZFJE00 in number ,--输入:[SP_SF_FYMX00_REG000]自费金额
ad_JZJE00 in number ,--输入:[SP_SF_FYMX00_REG000]记账金额
ad_GFJE00 in number ,--输入:[SP_SF_FYMX00_REG000]公费金额
ad_QZFJE0 in number ,--输入:[SP_SF_FYMX00_REG000]自付金额
ad_KDKS00 in number ,--输入:[SP_SF_FYMX00_REG000]开单科室编号
ad_KDYS00 in number ,--输入:[SP_SF_FYMX00_REG000]开单医生工号
ad_ZXKS00 in number ,--输入:[SP_SF_FYMX00_REG000]执行科室编号
ad_ZXYS00 in number ,--输入:[SP_SF_FYMX00_REG000]执行医生工号
as_SFYDJ0 in varchar2 ,--输入:[SP_SF_FYMX00_REG000]是否收费处登记,'1':收费处登记
as_ZFBL00 in varchar2 ,--输入:[SP_SF_FYMX00_REG000]自付比例
as_ZRZYLS in varchar2 default '' ,--输入:择日住院流水号
ad_SFCKBH in number ,--输入:[SP_SF_YFCF00]收费窗口编号
ad_PYCKBH in number default 0 ,--输入:[SP_SF_YFCF00]
ad_FYCKBH in number default 0 ,--输入:[SP_SF_YFCF00]
as_SFQZF0 in varchar2 default 'N',--输入:[SP_SF_YFCF00]
as_ZYDJQT in varchar2 default 'N',--输入:[SP_SF_YFCF00]是否执行中药代煎其他费用(中药袋子费用、配送费用) Y:执行 N:不执行
as_COMMIT in varchar2 default 'N',--输入:是否提交事务 Y:是 N:否
as_INXML0 in varchar2 ,--输入:xml字符
ad_ZXZT00 out varchar2 ,--输出:执行状态 0:失败 1:成功
as_ERRMSG out varchar2 ,--输出:系统提示的错误信息
as_OUTXML out varchar2 --输出:xml字符
)
-- MODIFICATION HISTORY
-- Person Date Comments
--zhangyc 2023.06.25 参考SP_SF_FYMX00_REG000、SP_SF_YFCF00、SP_SF_YJDJ00 by MZSF-20230626-001
--zhangyc 2023.09.27 as_XMFL00=1时,ad_ZXKS00,ad_ZXYS00=YJ_YW0000.YJKSBH、KDYS00
as
LS_COUNT0 number(5);
LS_CZRQ00 char(8); --操作日期
LS_CZSJ00 char(8); --操作时间
LS_YBZXLB IC_YBBRLB.YBZXLB%type;
LS_YBLB00 IC_YBBRLB.YBLB00%type;
LS_FBBH00 BM_BRXXB0.FBBH00%type;
LS_SplitNo varchar2(1);--是否拆分收费单据号 1:拆分 0:不拆分
LS_OPEN_ZFCFBZ varchar2(1);--开启自费处方标志分开结算(0:不启用 1:启用)
SF_SplitFBillNo varchar2(1);--门诊收费系统费用处理登记未扣费是否独立生成收费单号(不同的医技单或处方流水号收费单据号分开) 0:不分开 1:分开 默认值:0
LS_ID0000 SF_FYXX00_DJH000.ID0000%type;--Id0000
LS_BRID00 SF_FYXX00_DJH000.BRID00%type;--病人ID
LS_GHID00 SF_FYXX00_DJH000.GHID00%type;--挂号id
LS_GHH000 SF_FYXX00_DJH000.GHH000%type;--挂号号
LS_DJH000 SF_FYXX00_DJH000.DJH000%type;--单据号
LS_TPCDJH SF_FYXX00_DJH000.TPCDJH%type;--同批次收费单据号
LS_CFLSH0 SF_FYXX00_DJH000.CFLSH0%type;--处方流水号
LS_YJDJH0 SF_FYXX00_DJH000.YJDJH0%type;--医技单据号
LS_XMFL00 SF_FYXX00_DJH000.XMFL00%type;--项目分类 0:处方 1:医技 2:费用 3:收费代入费用
LS_ZFCFBZ SF_FYXX00_DJH000.ZFCFBZ%type;--自费处方标志:0或空:正常处方,1:自费处方
LS_XMLSTR SF_FYXX00_DJH000.XMLSTR%type;--XML字符
LS_MXID00 SF_FYXX00_DJH000.MXID00%type;--明细ID=SF_FYXX00_TEMPMX.MXID00
LS_CFID00 SF_FYXX00_DJH000.CFID00%type;--处方ID或YJ_YWJJ00.ID0000
LS_KFZT00 SF_FYXX00_TEMPMX.KFZT00%type;--扣费状态0 未扣费 1已扣费
LS_JSLX00 SF_FYXX00_TEMPMX.JSLX00%type;--结算类型 0 费用登记 1费用结算
LS_SFFSYB SF_FYXX00_TEMPMX.SFFSYB%type;--是否发送医保 1发送 0:不发送
LS_SFYLXM SF_FYXX00_TEMPMX.SFYLXM%type;--是否医疗项目 Y:是否 N:否
LS_SFXZFS SF_FYXX00_TEMPMX.SFXZFS%type;--是否选择发送 0 否 1 是
LS_BAKXML SF_FYXX00_TEMPMX.BAKXML%type;--医保备用2
LS_YSKS00 SF_FYXX00_TEMPMX.YSKS00%type;
LS_KDKS00 SF_FYXX00_TEMPMX.KDKS00%type;--开单科室编号
LS_KDYS00 SF_FYXX00_TEMPMX.KDYS00%type;--开单医生工号
LS_ZXKS00 SF_FYXX00_TEMPMX.ZXKS00%type;--执行科室编号
LS_ZXYS00 SF_FYXX00_TEMPMX.ZXYS00%type;--执行医生工号
LS_YJKSBH YJ_YW0000.YJKSBH%type;--医技科室编码
LS_YJKDYS YJ_YW0000.KDYS00%type;--医技开单医生
begin
ad_ZXZT00:='0';--输出:执行状态 0:失败 1:成功
as_ERRMSG:='';--输出:系统提示的错误信息
as_OUTXML:=null;
LS_CZRQ00:=to_char(sysdate,'YYYYMMDD');
LS_CZSJ00:=to_char(sysdate,'HH24:MI:SS');
LS_SplitNo:='0';--是否拆分收费单据号 1:拆分 0:不拆分
LS_ID0000:=ad_ID0000;--Id0000
LS_BRID00:=ad_BRID00;--病人ID
LS_GHID00:=ad_GHID00;--挂号id
LS_GHH000:=as_GHH000;--挂号号
LS_XMFL00:=as_XMFL00;--项目分类 0:处方 1:医技 2:费用 3:收费代入费用
LS_DJH000:=nvl(ad_DJH000,0);--收费单据号
LS_TPCDJH:=nvl(ad_DJH000,0);--同批次收费单据号
LS_CFID00:=0;--处方ID或YJ_YWJJ00.ID0000
LS_XMLSTR:=null;--XML字符
LS_KFZT00:='0';--扣费状态0 未扣费 1已扣费
LS_JSLX00:='0';--结算类型 0 费用登记 1费用结算
LS_KDKS00:=ad_KDKS00;--开单科室编号
LS_KDYS00:=ad_KDYS00;--开单医生工号
LS_ZXKS00:=ad_ZXKS00;--执行科室编号
LS_ZXYS00:=ad_ZXYS00;--执行医生工号
begin
select BMBH00 into LS_YSKS00 from BM_YGBM00 where YGBH00 = LS_KDYS00;
exception
when others then
LS_YSKS00:=0;
end;
begin
select A.FBBH00,C.YBZXLB,C.YBLB00
into LS_FBBH00,LS_YBZXLB,LS_YBLB00
from BM_BRXXB0 A,IC_YBBRLB C
where A.FBBH00 =C.FBBH00 and A.YBLB00=C.YBLB00 and A.BRID00=LS_BRID00;
exception
when others then
ad_ZXZT00:='0';
as_ERRMSG:='未找到有效病人基本信息!BRID00='||LS_BRID00;
rollback;
return;
end;
if LS_XMFL00 in ('2','3') then --2:费用 3:收费代入费用
select count(1) into LS_COUNT0 from BM_FPXM00 A,BM_YYSFXM B where A.FPXMID = B.MZFPID and B.SFXMID=ad_XMBH00;
if nvl(LS_COUNT0,0) = 0 then
ad_ZXZT00:='0';
as_ERRMSG:='未找到有效的医院收费项目!SFXMID='||ad_XMBH00;
rollback;
return;
end if;
end if;
--步骤0:入参组成xml格式
if LS_XMFL00 in ('0') then --0:处方
LS_CFLSH0:=as_DJLSH0;--处方流水号
LS_YJDJH0:=0;--医技单据号
LS_XMLSTR:=null;--XML字符
LS_XMLSTR:=substrb(LS_XMLSTR||SF_XT_XMLJSON('AS_CFLSH0',as_DJLSH0,0,0,null,null),1,4000);--as_CFLSH0 in char, --处方流水号
LS_XMLSTR:=substrb(LS_XMLSTR||SF_XT_XMLJSON('AD_DJH000',ad_DJH000,0,0,null,null),1,4000);--ad_DJH000 in number, --单据号
LS_XMLSTR:=substrb(LS_XMLSTR||SF_XT_XMLJSON('AD_SFCKBH',ad_SFCKBH,0,0,null,null),1,4000);--ad_SFCKBH in number, --收费窗口编号
LS_XMLSTR:=substrb(LS_XMLSTR||SF_XT_XMLJSON('AD_PYCKBH',ad_PYCKBH,0,0,null,null),1,4000);--ad_PYCKBH in number default 0,
LS_XMLSTR:=substrb(LS_XMLSTR||SF_XT_XMLJSON('AD_FYCKBH',ad_FYCKBH,0,0,null,null),1,4000);--ad_FYCKBH in number default 0,
LS_XMLSTR:=substrb(LS_XMLSTR||SF_XT_XMLJSON('AS_SFQZF0',as_SFQZF0,0,0,null,null),1,4000);--as_SFQZF0 in char default 'N',
LS_XMLSTR:=substrb(LS_XMLSTR||SF_XT_XMLJSON('AD_CZY000',ad_CZY000,0,0,null,null),1,4000);--ad_CZY000 in number default 0, --操作员
LS_XMLSTR:=substrb(LS_XMLSTR||SF_XT_XMLJSON('AS_ZYDJQT',AS_ZYDJQT,0,0,null,null),1,4000);--AS_ZYDJQT in char default 'N' --是否执行中药代煎其他费用(中药袋子费用、配送费用) Y:执行 N:不执行
LS_XMLSTR:=substrb(''||LS_XMLSTR||'',1,4000);
elsif LS_XMFL00 in ('1') then -- 1:医技
LS_CFLSH0:=null;--处方流水号
LS_YJDJH0:=SF_SF_STRTONUM(as_DJLSH0);--医技单据号
begin
select YJKSBH,KDYS00 into LS_YJKSBH,LS_YJKDYS from YJ_YW0000 where BRID00=ad_BRID00 and YJDJH0=LS_YJDJH0;
exception
when others then
LS_YJKSBH:=null;--医技科室编码
LS_YJKDYS:=null;--医技开单医生
end;
LS_ZXKS00:=nvl(LS_YJKSBH,ad_ZXKS00);--执行科室编号
LS_ZXYS00:=nvl(LS_YJKDYS,ad_ZXYS00);--执行医生工号
LS_XMLSTR:=null;--XML字符
LS_XMLSTR:=substrb(LS_XMLSTR||SF_XT_XMLJSON('AD_YJDJH0',as_DJLSH0,0,0,null,null),1,4000);--ad_YJDJH0 IN NUMBER, --医技单据号
LS_XMLSTR:=substrb(LS_XMLSTR||SF_XT_XMLJSON('AD_DJH000',ad_DJH000,0,0,null,null),1,4000);--ad_DJH000 IN NUMBER, --单据号
LS_XMLSTR:=substrb(LS_XMLSTR||SF_XT_XMLJSON('AD_ZXKS00',LS_ZXKS00,0,0,null,null),1,4000);--ad_ZXKS00 IN NUMBER, --执行科室
LS_XMLSTR:=substrb(LS_XMLSTR||SF_XT_XMLJSON('AD_ZXYS00',LS_ZXYS00,0,0,null,null),1,4000);--ad_ZXYS00 IN NUMBER, --执行医生
LS_XMLSTR:=substrb(''||LS_XMLSTR||'',1,4000);
elsif LS_XMFL00 in ('2') then --2:费用
LS_CFLSH0:=null;--处方流水号
LS_YJDJH0:=0;--医技单据号
LS_XMLSTR:=null;--XML字符
elsif LS_XMFL00 in ('3') then --3:收费代入费用
LS_CFLSH0:='0';--处方流水号
LS_YJDJH0:=0;--医技单据号
LS_XMLSTR:=null;--XML字符
end if;
begin
select substr(trim(VALUE0),1,1) into SF_SplitFBillNo from XT_XTCS00 where name00 = 'SF_SplitFBillNo';
exception
when others then
SF_SplitFBillNo:='0';
end;
LS_OPEN_ZFCFBZ:=substrb(SF_SF_OPEN_ZFCFBZ(LS_BRID00,LS_FBBH00),1,1);--开启自费处方标志分开结算(0:不启用 1:启用)
if LS_OPEN_ZFCFBZ='1' or SF_SplitFBillNo='1' then
LS_SplitNo:='1';--是否拆分收费单据号 1:拆分 0:不拆分
end if;
--步骤1:获取中间收费单号
begin
select count(1),max(DJH000),max(MXID00),max(ZFCFBZ) into LS_COUNT0,LS_DJH000,LS_MXID00,LS_ZFCFBZ
from SF_FYXX00_DJH000 where ID0000=LS_ID0000 and BRID00=LS_BRID00
and GHID00=LS_GHID00 and XMFL00=LS_XMFL00
and
(
(LS_XMFL00 in ('0') and CFLSH0=LS_CFLSH0) --0:处方
or (LS_XMFL00 in ('1') and YJDJH0=LS_YJDJH0) --1:医技
or (LS_XMFL00 in ('2') and CFLSH0=LS_CFLSH0 and YJDJH0=LS_YJDJH0) --2:费用
or (LS_XMFL00 in ('3') and CFLSH0=LS_CFLSH0 and YJDJH0=LS_YJDJH0) --3:收费代入费用
);
exception
when others then
LS_DJH000:=null;
LS_MXID00:=null;--明细ID=SF_FYXX00_TEMPMX.MXID00
LS_ZFCFBZ:=null;--自费处方标志:0或空:正常处方,1:自费处方
end;
LS_DJH000:=nvl(LS_DJH000,ad_DJH000);
if LS_XMFL00 in ('0') then --0:处方
Select
substrb(SF_SF_GET_ZFCFBZ(0,A.BRID00,A.GHID00,A.DJH000,A.CFLSH0,A.BCCFH0,A.ZFCFBZ,A.FJFDJH,null),1,1) as ZFCFBZ --自费处方标志:0:正常处方 1:自费处方
into LS_ZFCFBZ
from YF_MZCF00 A where A.BRID00=LS_BRID00 and A.GHID00=LS_GHID00 and A.cflsh0=LS_CFLSH0;
elsif LS_XMFL00 in ('1') then -- 1:医技
select
substrb(SF_SF_GET_ZFCFBZ(1,A.BRID00,A.ZYGHID,A.SFDJH0,A.YJDJH0,A.CXDJH0,A.ZFCFBZ,A.ZLDCCF,null),1,1) as ZFCFBZ --自费处方标志:0:正常处方 1:自费处方
into LS_ZFCFBZ
from YJ_YW0000 A where A.BRID00=LS_BRID00 and A.ZYGHID=LS_GHID00 and A.YJDJH0 =LS_YJDJH0 and A.MZZYBZ='0' ;
elsif LS_XMFL00 in ('2') then --2:费用
LS_ZFCFBZ:=nvl(LS_ZFCFBZ,'0');--自费处方标志:0或空:正常处方,1:自费处方
elsif LS_XMFL00 in ('3') then --3:收费代入费用
LS_ZFCFBZ:=nvl(LS_ZFCFBZ,'0');--自费处方标志:0或空:正常处方,1:自费处方
end if;
--步骤2:中间表插入数据
if nvl(LS_COUNT0,0)=0 then
select SQ_SF_FYTEMP_MXID00.nextval into LS_MXID00 from dual;
if LS_SplitNo='1' then --是否拆分收费单据号 1:拆分 0:不拆分
select SQ_SF_BRJFB0_DJH000.nextval into LS_DJH000 from dual;
end if;
insert into SF_FYXX00_DJH000(ID0000,MXID00,BRID00,GHID00,GHH000,CFLSH0,CFID00,YJDJH0,DJH000,XMFL00,YPNM00,SFXMID,CFBZ00,KFZT00,JZDH00,ZFCFBZ,TPCDJH,XMLSTR)
select LS_ID0000,LS_MXID00,LS_BRID00,LS_GHID00,LS_GHH000,LS_CFLSH0,LS_CFID00,LS_YJDJH0,LS_DJH000,LS_XMFL00,0,0,LS_XMFL00,LS_KFZT00,0,LS_ZFCFBZ,LS_TPCDJH,LS_XMLSTR from dual;
end if;
--步骤三:插入中间表
if LS_FBBH00=3 then
if LS_ZFCFBZ='1' then
LS_SFFSYB :='0';--是否发送医保 1发送 0:不发送
LS_SFYLXM :='N';--是否医疗项目 Y:是否 N:否
LS_SFXZFS :='1';--是否选择发送 0 否 1 是
else
LS_SFFSYB :='1';--是否发送医保 1发送 0:不发送
LS_SFYLXM :='Y';--是否医疗项目 Y:是否 N:否
LS_SFXZFS :='0';--是否选择发送 0 否 1 是
end if;
else
LS_SFFSYB :='0';--是否发送医保 1发送 0:不发送
LS_SFYLXM :='N';--是否医疗项目 Y:是否 N:否
LS_SFXZFS :='0';--是否选择发送 0 否 1 是
end if;
if LS_XMFL00 in ('2','3') then --2:费用 3:收费代入费用
insert into SF_FYXX00_TEMPMX
(
ID0000,MXID00,CZY000,CZRQ00,CZSJ00,BRID00,FBBH00,YBZXLB,YBLB00,
GHID00,GHH000,XMFL00,ZFCFBZ,CFLSH0,CFID00,YJDJH0,DJH000,FLAG00,
SFXMID,YPNM00,XMBH00,XMMC00,XMDW00,XMGG00,XMJE00,XMSL00,XMDJ00,
JZJE00,ZFJE00,GFJE00,XJZF00,ZFBL00,KDKS00,KDYS00,ZXKS00,ZXYS00,
ZRZYLS,SFYDJ0,CFBZ00,KFZT00,JSLX00,SFFSYB,SFYLXM,SFXZFS,BAKXML,
YSKS00
)
select
LS_ID0000,LS_MXID00,ad_CZY000,LS_CZRQ00,LS_CZSJ00,LS_BRID00,LS_FBBH00,LS_YBZXLB,LS_YBLB00,
LS_GHID00,LS_GHH000,LS_XMFL00,LS_ZFCFBZ,LS_CFLSH0,LS_CFID00,LS_YJDJH0,LS_DJH000,decode(LS_XMFL00,'0','1','0'),
decode(LS_XMFL00,'0',0,ad_XMBH00),decode(LS_XMFL00,'0',ad_XMBH00,0),ad_XMBH00,substrb(trim(as_XMMC00),1,200),substrb(trim(as_XMDW00),1,50),substrb(trim(as_XMGG00),1,50),ad_HJJE00,ad_XMSL00,ad_XMDJ00,
ad_JZJE00,ad_ZFJE00,ad_GFJE00,ad_QZFJE0,as_ZFBL00,LS_KDKS00,LS_KDYS00,LS_ZXKS00,LS_ZXYS00,
as_ZRZYLS,as_SFYDJ0,LS_XMFL00,LS_KFZT00,LS_JSLX00,LS_SFFSYB,LS_SFYLXM,LS_SFXZFS,LS_BAKXML,
LS_YSKS00
from dual;
end if;
ad_ZXZT00:='1';--输出:执行状态 0:失败 1:成功
as_ERRMSG:='';--输出:系统提示的错误信息
as_OUTXML:='';
if as_COMMIT='Y' then
commit;
end if;
exception
when no_data_found then
ad_ZXZT00:='0';
as_ERRMSG:=substrb('门诊费用登记处理整理数据异常!错误原因:'||sqlerrm,1,200);
rollback;
when others then
ad_ZXZT00:='0';
as_ERRMSG:=substrb('门诊费用登记处理整理数据异常!错误原因:'||sqlerrm,1,200);
rollback;
end;
/
show error;
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%